package org.zh.util.log;

import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ZHOpenLog {
    //product  log Name    %h/logs/app.%u.%g.log
    private static final String logName = System.getProperty("ZHOpen.log.name", "app.%u.%g.log");
    private static final String logEnv = System.getProperty("ZHOpen.log.env", "dev");

    public static Logger getLogger(Class<?> clazz) {
        Logger logger = Logger.getLogger(clazz.getName());
        // 清空默认处理器（避免重复输出）
        logger.setUseParentHandlers(false);
        try {
            if (logEnv.equals("dev")) {
                // 1. 配置控制台处理器
                ConsoleHandler consoleHandler = new ConsoleHandler();
                consoleHandler.setLevel(Level.INFO); // 控制台只输出INFO及以上级别
                consoleHandler.setFormatter(new CustomFormatter());
                logger.addHandler(consoleHandler);

                // 2. 配置文件处理器（支持日志滚动） true表示追加模式
                FileHandler fileHandler = new FileHandler(logName, 1024 * 1024, 100, false);
                fileHandler.setLevel(Level.FINE); // 文件记录FINE及以上级别
                fileHandler.setFormatter(new CustomFormatter());
                logger.addHandler(fileHandler);
            }
            if (logEnv.equals("product")) {
                // 1. 配置控制台处理器
                ConsoleHandler consoleHandler = new ConsoleHandler();
                consoleHandler.setLevel(Level.INFO); // 控制台只输出INFO及以上级别
                consoleHandler.setFormatter(new CustomFormatter());
                logger.addHandler(consoleHandler);

                // 2. 配置文件处理器（支持日志滚动） true表示追加模式
                FileHandler fileHandler = new FileHandler(logName,
                        1073741824, 20, true);
                fileHandler.setLevel(Level.FINE); // 文件记录FINE及以上级别
                fileHandler.setFormatter(new CustomFormatter());
                logger.addHandler(fileHandler);
            }

            //3 配置远程处理器
            // SocketHandler socketHandler = new SocketHandler("127.0.0.1",9000);
            // socketHandler.setLevel(Level.WARNING);
            // socketHandler.setFormatter(new CustomFormatter());
            // logger.addHandler(socketHandler);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        // 设置Logger的全局级别（低于此级别的日志会被忽略）
        logger.setLevel(Level.FINE);
        return logger;
    }
}
